/* eslint-disable @typescript-eslint/no-explicit-any */
/*—————————————————————————————————————————————————————————— 路由所需接口文件 ——————————————————————————————————————————————————————————*/

type LayoutItem = 'headr' | 'sider' | 'footer'

// 路由数组内接口
export interface IRoute {
  children?: IRouteChildren // 内嵌路由
  index?: boolean // 嵌套路中默认展示开关
  path?: string // 路由地址
  noLogin?: boolean // 是否不用登陆可查看
  isLayOut?: LayoutItem[] // 传入需要展示的类型数组进行判断展示的layOut组件
  fileAddress?: string // 文件放置地址，需按照pages内的路径寻找，如首页则是 index/index
  navigate?: string // 若是需要重定向的地址
  title?: string // 页面标题
  name?: string // 页面自定义名称
  [key: string]: any // 其他内容对象
}

// 路由数组子集类型
// ---------------------------------------------------------------------------------------------
export type IRouteChildren = Array<Omit<IRoute, 'children'>>

// 构造路由数组类型
// ---------------------------------------------------------------------------------------------
export type limitRouter = IRoute & {
  element: JSX.Element
  children?: limitRouter[]
}

// 路由拦截组件接口
// ---------------------------------------------------------------------------------------------
export interface routerIntercept {
  item: IRoute
}

// 路由element替换内容函数接口
// ---------------------------------------------------------------------------------------------
export interface RouterElement<T> {
  (routerList: T): limitRouter[]
}
